package com.example.forum.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.example.forum.model.Announcement;

/**
 * 系统公告Mapper接口
 */
@Mapper
public interface AnnouncementMapper {
    
    /**
     * 创建新公告
     * @param record 公告记录
     * @return 影响的行数
     */
    int insert(Announcement record);
    
    /**
     * 根据ID查询公告
     * @param id 公告ID
     * @return 公告信息
     */
    Announcement selectById(Long id);
    
    /**
     * 更新公告信息
     * @param record 公告记录
     * @return 影响的行数
     */
    int update(Announcement record);
    
    /**
     * 逻辑删除公告
     * @param id 公告ID
     * @return 影响的行数
     */
    int deleteById(Long id);
    
    /**
     * 物理删除公告(谨慎使用)
     * @param id 公告ID
     * @return 影响的行数
     */
    int permanentDeleteById(Long id);
    
    /**
     * 获取所有有效公告列表
     * @param offset 偏移量
     * @param limit 限制条数
     * @return 公告列表
     */
    List<Announcement> selectActive(@Param("offset") int offset, @Param("limit") int limit);
    
    /**
     * 获取所有公告列表(包括草稿和已过期)
     * @param offset 偏移量
     * @param limit 限制条数
     * @return 公告列表
     */
    List<Announcement> selectAll(@Param("offset") int offset, @Param("limit") int limit);
    
    /**
     * 获取置顶公告列表
     * @return 置顶公告列表
     */
    List<Announcement> selectTopAnnouncements();
    
    /**
     * 获取有效公告总数
     * @return 公告总数
     */
    int countActive();
    
    /**
     * 获取所有公告总数
     * @return 公告总数
     */
    int countAll();
    
    /**
     * 增加公告浏览量
     * @param id 公告ID
     * @return 影响的行数
     */
    int incrementViewCount(Long id);
    
    /**
     * 更新公告状态
     * @param id 公告ID
     * @param status 状态值
     * @return 影响的行数
     */
    int updateStatus(@Param("id") Long id, @Param("status") Byte status);
    
    /**
     * 更新公告置顶状态
     * @param id 公告ID
     * @param isTop 是否置顶
     * @return 影响的行数
     */
    int updateTopStatus(@Param("id") Long id, @Param("isTop") Byte isTop);
} 